筆記、[ALG101] 看程式


Posted by s103071049 on 2021-04-22

看程式碼=理解程式碼如何運作

除蟲教學(1)- Chrome Devtool Debugger

  • Chrome Devtool 時間差問題 : 通常會發生在,你log這個東西,但後面又去改它,這時前面log會顯示這個變數最新儲存的值。 array、object都會發生上述問題。解決方法,不要印變數,印字串JSON.stringify(arr)//它會在這個時間點把它的狀態保存起來。

除蟲教學(2)- log 加到爆

  • 可以從這些log裡面看他的值和我想像的是否一樣

練習(1)- 找次大值

// 想像拿了一副撲克牌,拿最大牌、次大牌放旁邊
// 新的牌有三種狀況,比兩個都小,比最大還大,比次大大但比最大小
let arr =[5,8,6]

let max1=-Infinity
let max2=-Infinity //兩個都設arr[0]會有狀況,ex [6,4,1]

for(var i=0;i<arr.length;i++){
    if(arr[i]>max1){
        max2=max1
        max1=arr[i]
    }
    else if(arr[i]>max2){
        max2=arr[i]
    }
}
console.log(max1,max2)
  1. 要找次大值的陣列
  2. 把最大值與次大值初始化成很小的數
  3. 迴圈掃完整個陣列
  4. i 目前是 0
  5. arr[0]=5 是否大於 max1
  6. 是,則原本的最大值變成次大值,arr[0]則變成最大值
  7. 執行下一圈迴圈,i 目前是 1
  8. arr[1]=8 是否大於 max1=5
  9. 是,則max2=5,max1=8
  10. 執行下一圈迴圈,i 目前是 2
  11. arr[2]=6 是否大於 max1=5
  12. arr[2]=6 是否大於 max2=5
  13. 是,則max2=6
  14. 下一圈迴圈,i 目前是 3 ,超出迴圈範圍,迴圈結束
  15. 印出 max1 and max2

練習(2)- 字串轉大寫

ASCII code : (a=97,z=122;A=65,Z=90) 中間轉換差 32

// 法一、字串是否為小寫:判斷ASCII CODE 是否介於97~122
// 法二、字串直接比大小,比的是字典序 

/* 小寫轉大寫、ASCII code-32
   String.fromCharCode(parameter) parameter為 ASCII code
   string.charCodeAt(index) 我要知道 string[index] 的charCode 是多少   
*/ 

let str = "Hi"
let ans = ""

for(let i=0 ; i<str.length ; i++){
    let code = str.charCodeAt(i)
    if(code >= 97 && code <= 122){
        ans+=String.fromCharCode(code-32)
    }
    else{
        ans+=str[i]

    }
}
console.log(ans)
  1. 宣告字串與ans的初始值
  2. 迴圈從 0 開始
  3. i=0,獲得 str[0]=H 的 ASCII code (72)
  4. 判斷是否符合條件,不符合 => 進入else區塊,更改ans => ans="H"
  5. 下一圈迴圈,i=1,獲得 str[1]=i 的 ASCII code (105)
  6. 判斷是否符合條件,符合,ans + 變成大寫後的結果 => ans="HI"
  7. 下一圈迴圈,i=2,超出迴圈範圍,迴圈結束
  8. 印出 ans // ans="HI"

練習(3)- 刪除特定字元

不要想成刪除,想成略過


let str ="hello"
let deleted="l"
let ans=""
for(let i=0;i<str.length;i++){
    if(str[i]!==deleted){
        ans+=str[i]

    }
}
console.log(ans)
  1. 宣告字串、要刪除的字、ans的初始值
  2. 迴圈從0開始
  3. i=0,判斷是否符合條件,符合,更改ans=> ans="h"
  4. 下一圈迴圈,i=1,判斷是否符合條件,符合,更改ans=> ans="he"
  5. 下一圈迴圈,i=2,判斷是否符合條件,不符合
  6. 下一圈迴圈,i=3,判斷是否符合條件,不符合
  7. 下一圈迴圈,i=4,判斷是否符合條件,符合,更改ans=> ans="heo"
  8. 下一圈迴圈,i=5,超出迴圈範圍,迴圈結束
  9. 印出 ans

作業(1)- 找次小值

let arr=[10,8,6]
let min1=Infinity //最小值
let min2=Infinity //次小值

for(let i=0;i<arr.length;i++){
    if(arr[i]<min1){
        min2=min1
        min1=arr[i]
    }
    else if(arr[i]<min2){
        min2=arr[i]
    }
}
console.log(min1,min2) //6,8
  1. 宣告陣列並初始化最小值與次小值
  2. 迴圈從0開始
  3. i=0,判斷是否符合條件,是(arr[0]=10 < 最小值),將次小值更新成最小值,再將最小值更新成arr[0]=10, [目前:最小=10,次小=無窮大]
  4. 下一圈迴圈,i=1,判斷是否符合條件,是,將次小值更新成最小值,再將最小值更新成arr[1]=8, [目前:最小=8,次小=10]
  5. 下一圈迴圈,i=2,判斷是否符合條件,是,將次小值更新成最小值,再將最小值更新成arr[2]=6, [目前:最小=6,次小=8]
  6. 下一圈迴圈,i=3,超出迴圈範圍,迴圈結束
  7. 印出最小值與次小值

作業(2)- 大小寫互換

let str="hELLo"
let ans=""

for(let i=0;i<str.length;i++){
    let code=str.charCodeAt(i)
    if(code>=97&&code<=122){ //字母小寫的狀況
        ans+=String.fromCharCode(code-32)
    }
    else if(code>=65&&code<=90){
        ans+=String.fromCharCode(code+32)
    }
    else{
        ans+=str[i]
    }
}
console.log(ans)
  1. 初始化字串、初始化變數
  2. 迴圈從0開始
  3. i=0,獲得str[0]=h 的ASCII code (104)
  4. 判斷是否符合條件,是 (104 >= 97 且 104 =< 122),將其轉成大寫(ASCII code-32),更改ans => ans="H"
  5. 下一圈迴圈,i=1,獲得str[1]=E 的ASCII code (69)
  6. 判斷是否符合條件,否 (69 >= 97 且 69 =< 122),
  7. 判斷是否符合條件,是 (69 >=65 且 69 <= 90),將其轉成小寫(ASCII code+32) ,更改ans => ans="He"
  8. 重複執行迴圈,直到 i=5,超出迴圈範圍,迴圈結束
  9. 印出結果

作業(3)- 印出因數

let num=30
for(let i=1;i<=num;i++){
    if(num%i===0){
        console.log(i)
    }
}
  1. 初始化數字
  2. 迴圈從1開始
  3. i=1,判斷條件是否符合條件,是(數字可以被i=1整除),將i印出來=>印出1
  4. 下一圈迴圈,i=2,判斷條件是否符合條件,是(數字可以被i=2整除),將i印出來=>印出2
  5. 下一圈迴圈,i=3,判斷條件是否符合條件,是(數字可以被i=3整除),將i印出來=>印出3
  6. 下一圈迴圈,i=4,判斷條件是否符合條件,否(數字不可以被i=3整除)
  7. 重複執行迴圈,直到 i=31,超出迴圈範圍,迴圈結束

#看程式碼







Related Posts

使用 Sass 管理 CSS

使用 Sass 管理 CSS

.Net MVC authorization Controller and Workcontext extension in razor view

.Net MVC authorization Controller and Workcontext extension in razor view

簡明約耳趣談軟體(Joel on Software)導讀書摘

簡明約耳趣談軟體(Joel on Software)導讀書摘


Comments